一、 NFS介紹
NFS(Network FileSystem)是由SUN公司所發展出來的。NFS是一個RPC Service,使檔案能夠共享,而NFS的設計是為了在不同的系統、不同的機器都可透過網路的方式而使用共享的檔案。
二、 設定說明
檢查及安裝
1.1檢查是否有安裝NFS和portmap
如果是使用Centos5.x,會使用的是portmap而不是rpcbind
[root@localhost ~]# rpm -qa | grep nfs
nfs-utils-1.0.9-50.el5
nfs-utils-lib-1.0.8-7.6.el5
system-config-nfs-1.3.23-1.el5
[root@localhost ~]# rpm -qa | grep portmap
portmap-4.0-65.2.2.1
1.2 安裝NFS和portmap (沒安裝的請用Yum安裝也可更新套件)
[root@localhost ~]# yum install nfs-utils portmap
1.3 檢查核心板本
由於NFS會直接使用到核心功能,所以在核心的部份也要有支源NFS。只要核心版本高於2.2版,也不是自行編輯過的,基本上就都能使用。
[root@localhost ~]# uname -r
2.6.18-238.el5
設定/etc/exports
2.1 exports是NFS的主要設定檔,如果系統內沒有這隻檔案的話,請手動vim建立。
[root@localhost ~]# vim /etc/exports
/opt 192.168.1.10(ro) *(ro)
[分享目錄] [限制的主機 (權限)] [任何IP都可使用(唯讀)]
以上設定檔是說,要分享opt這個目錄給192.168.1.10這個ip的主機使用唯讀的權限。
或是任何IP都可使用唯讀的權限。
分享目錄 : 這邊最好都是輸入絕對路徑才不會有奇奇怪怪的問題發生。
主機名稱 :
1.可使用IP,網址或是主機名稱。但是主機名稱必須要是DNS可以解析的到
或是在hosts內有設定的才可使用。在主機名稱和網址的部份是可使用萬
用字元。
2.若是不想對任何主機有所限制的話可以使用「*」表示任何主機都可連至
NFS來使用。
3.如果同一個目錄要針對不同主機設定不同權限使用的話,可以接在前一個
主機設定的後面繼續設定。如下
[root@localhost ~]# vim /etc/exports
/opt 192.168.1.10(ro) *(ro) localhost(rw)
[分享目錄] [限制的主機 (權限)] [任何IP都可使用(唯讀)] [可用主機名]
權限設定 : 在設定權限的部份,需要注意的是在每個主機後面都必需要用()小括號,
來設定所需要的權限參數,而小括是和主機名接下去的不需要空隔。如果參
數不只一個的時後可用(,)逗號分開。
2.2 常用到的參數 :
ro 只有讀的權限(唯讀read-only)
rw 可讀可寫的權限(read-write)
不過最後是否能讀寫,還是要看檔案和資料的rwx及身份有關係。
sync 所有資料會在請求使用時同步寫入到記憶體和硬碟。
async 資料會先暫存在記憶體中,而不是直接寫入硬碟。
hide 在NFS共享目錄中不共享子目錄
no_hide 在NFS共享目錄中共享子目錄
subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄權限(預設值)
no_ subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS不檢查父目錄權限
此參數用來讓系統判斷當使用者在使用NFS時的帳號若是root,該如何判別此身份。
no_root_squash 讓使用者能用root身份來執行NFS。並且對根目錄有完全的管理權限
root_squash 使用者的root身份會變成nfsnobody。可增加系統的安全性。(預設值)
all_squash 把所有登入nfs的使用者身份都變為匿名使用者(nobody、nfsbody)
wdelay 如果同時有多個使用者要寫入NFS,可以用群組的方式設定。(預設值)
no_wdelay 如果同時有多個使用者要寫入NFS,立即寫入,當有使用async就不用設置此參數
anon指的是anonymous(匿名者)。在*_squash指的匿名者的UID設定值,通常都是nobody(nfsbody),而此UID也可自行設定,前題是此UID必須存在/etc/passwd中。anonuid指的是UID而anongid則指的是群組的GID
anonuid=xxxxx 指定NFS伺服器/etc/passwd中匿名用戶的UID
anongid=xxxxx 指定NFS伺服器/etc/passwd中匿名用戶的GID
secure 設定NFS通過1024以下的TCP/IP 端口發送
insecure 設定NFS通過1024以上的TCP/IP端口發送
啟動NFS服務
[root@localhost ~]# /etc/init.d/portmap start
[root@localhost ~]# /etc/init.d/nfs start
[root@localhost ~]# /etc/init.d/nfslock start
[root@localhost ~]# chkconfig portmap on
[root@localhost ~]# chkconfig nfs on
[root@localhost ~]# chkconfig nfslock on
查看服務狀態
4.1 查看port
在啟動portmap服務時,同時也會開啟UDP和TCP的111port
而NFS本身則會開啟UDP和TCP的2049port
[root@localhost ~]# netstat -tulnp
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:781 0.0.0.0:* LISTEN 4842/rpc.mountd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 3668/portmap
tcp 0 0 0.0.0.0:854 0.0.0.0:* LISTEN 3640/rpc.statd
tcp 0 0 0.0.0.0:767 0.0.0.0:* LISTEN 4827/rpc.rquotad
udp 0 0 0.0.0.0:2049 0.0.0.0:* -
udp 0 0 0.0.0.0:778 0.0.0.0:* 4842/rpc.mountd
udp 0 0 0.0.0.0:848 0.0.0.0:* 3640/rpc.statd
udp 0 0 0.0.0.0:851 0.0.0.0:* 3640/rpc.statd
udp 0 0 0.0.0.0:111 0.0.0.0:* 3668/portmap
udp 0 0 0.0.0.0:764 0.0.0.0:* 4827/rpc.rquotad
4.2 觀察主機的RPC狀態(可使用rpcinfo)
[root@localhost ~]# rpcinfo -p IP或hostname
[root@localhost ~]# rpcinfo -t | -u IP或hostname 程式名稱
-p :針對某 IP (未寫則預設為本機) 顯示出所有的 port 與 porgram 的資訊;
-t :針對某主機的某支程式檢查其 TCP 封包所在的軟體版本;
-t :針對某主機的某支程式檢查其 UDP 封包所在的軟體版本;
4.3 NFS連線觀察
[root@localhost ~]# showmount [-ae] IP或hostname
-a :顯示目前主機與用戶端的 NFS 連線分享的狀態;
-e :顯示某部主機的 /etc/exports 所分享的目錄資料。
4.4 當重新設定/etc/exports時,不用重啟NFS只需執行(exportfs)
重新掛載
[root@localhost ~]# exportfs -arv
卸載
[root@localhost ~]# exportfs -auv
-a :全部掛載(或卸載) /etc/exports 檔案內的設定
-r :重新掛載 /etc/exports 裡面的設定,此外,同步更新 /etc/exports及
/var/lib/nfs/xtab 的內容
-u :卸載某一目錄
-v :在 export 的時候,將分享的目錄顯示到螢幕上
NFS的防火牆設定
5.1由於mountd、rquotad、nlockmgr這三個port每次重啟後都會不同。為了讓防火牆設定方便一點。就來吧這三個port號都設定成為固定的。(把白色改為黃色)
[root@localhost ~]# vim /etc/sysconfig/nfs
13 #RQUOTAD_PORT=875
13 RQUOTAD_PORT=1000
20 #LOCKD_TCPPORT=32803
20 LOCKD_TCPPORT=30000
22 #LOCKD_UDPPORT=32769
22 LOCKD_UDPPORT=30000
40 #MOUNTD_PORT=892
40 MOUNTD_PORT=1500
#最左邊的#要記得拿掉,然後在port號的部份可以自行設定。
5.2 檢測port是否都設定正確
[root@localhost ~]# /etc/init.d/nfs restart
[root@localhost ~]# rpcinfo -p | grep -E '(rquota|mount|nlock)'
100011 1 udp 1000 rquotad
100011 1 tcp 1000 rquotad
100021 1 udp 30000 nlockmgr
100021 1 tcp 30000 nlockmgr
100005 1 udp 1500 mountd
100005 1 tcp 1500 mountd
#會看到剛剛設定的port已經生效了
5.3 設定防火牆規則
[root@localhost ~]# vi /etc/sysconfig/iptables
#加入兩筆規則
-A RH-Firewall-1-INPUT -m state --state NEW -s 10.114.110.0/24 -m tcp -p tcp --dport 111,2049,1000,1500,30000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -s 10.114.110.0/24 -m udp -p udp --dport 111,2049,1000,1500,30000 -j ACCEPT
#這兩筆規則是設定限制此範圍內的IP 10.114.110.0/24,才可以登入使用NFS的TCP和UDP 111,2049,1000,1500,30000 port
[root@localhost ~]# /etc/init.d/iptables restart #重啟iptables 讓設定生效